<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Weixin{
    function __construct(){
		
	}
        
       /**
	 * 将xml转换为数组
	 * @param string $xml:xml文件或字符串
	 * @return array
	 */
	function xmlToArray($xml){
		//考虑到xml文档中可能会包含<![CDATA[]]>标签，第三个参数设置为LIBXML_NOCDATA
		if (file_exists($xml)) {
			libxml_disable_entity_loader(false);
			$xml_string = simplexml_load_file($xml,'SimpleXMLElement', LIBXML_NOCDATA);
		}else{
			libxml_disable_entity_loader(true);
			$xml_string = simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA);
		}
		$result = json_decode(json_encode($xml_string),true);
		return $result;
	}

	function data_to_xml($arr=array()){
		$xml = "<xml>";
		$xml .= $this->xml_children($arr);
		$xml .= "</xml>";
		return $xml;
	}
	function xml_children($arr){
		$xml = '';
		foreach($arr as $key=>$val){
			if(is_array($val)){
				$ls_xml = $this->xml_children($val);
				$xml .= "<{$key}>{$ls_xml}</{$key}>";
			}
			else{
				$xml .= "<{$key}>{$val}</{$key}>";
			}
		}
		return $xml;
	}
	
	function make_password( $length = 8){
		
		// 密码字符集，可任意添加你需要的字符
		$chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
		'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 
		't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 
		'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 
		'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', 
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
		// 在 $chars 中随机取 $length 个数组元素键名
		$keys = array_rand($chars, $length); 
		$password = '';
		for($i = 0; $i < $length; $i++)
		{
			// 将 $length 个数组元素连接成字符串
			$password .= $chars[$keys[$i]];
		}
		return $password;
	}
	
	function post_curls($url, $post){
		 
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $post); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        $res = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            echo 'Errno'.curl_error($curl);//捕抓异常
        }
        curl_close($curl); // 关闭CURL会话
        return $res; // 返回数据，json格式
    }
    
	function get_sign($arr,$key){
		
		
		
		foreach($arr as $k=>$val){
			if(empty($val)){
				unset($arr[$k]);
			}
		}
		ksort($arr);//参数名ASCII码从小到大排序
		
		$url = '';
		foreach($arr as $k=>$val){
			$url .= "{$k}={$val}&"; 
		}
		$url .= "key={$key}"; //最后拼接上key
		$SignTemp = md5($url); // 进行MD5运算
		$signValue = strtoupper($SignTemp);//到的字符串所有字符转换为大写
		return $signValue;
	}
   
	function get_url($url){
		return file_get_contents($url);
	}
}